TimesTen Clientを使用してリモート・サーバー・マシンにあるデータ・ストアにアクセスする場合、接続に対してネットワーク上のオーバーヘッドが発生します。可能な場合は、TimesTen Data Managerをローカルにアクセスするようにアプリケーションを作成し、アプリケーションをTimesTen Data Managerと直接リンクするようにしてください。
TimesTen Clientは、通常、TCP/IPソケットを使用してTimesTen Serverと通信します。TimesTen ClientとTimesTen Serverの両方が同一マシン上にある場合は、プロセス間の通信(IPC)に共有メモリー・セグメントまたはUNIXドメイン・ソケットを使用することで、クライアント・アプリケーションのパフォーマンスが改善されます。
共有メモリー・セグメントをIPCとして使用するには、ttendaemon.optionsファイルでサーバー・オプションを設定する必要があります。サーバー・オプションの詳細は、「TimesTen Webサーバーのオプションの変更」を参照してください。
また、IPCに共有メモリー・セグメントを使用するアプリケーションでは、ネットワーク・アドレスとしてttShmHost
を使用して論理サーバー名(クライアントDSNに対する)を設定する必要があります。詳細は、「UNIXでのクライアントDSNの作成および構成」を参照してください。
この機能は共有メモリーを大量に必要とする可能性があります。TimesTen Serverは、既存の接続数や全接続内の文の数にかかわりなく、共有メモリー・セグメントを事前に割り当てます。
UNIXマシンでアプリケーションを実行しているときにメモリーの使用量が懸念される場合は、UNIXドメイン・ソケットを通信に使用すると、TimesTen Client ODBCドライバを使用しているアプリケーションのパフォーマンスを改善できる場合があります。UNIXドメイン・ソケットの使用によるパフォーマンスの改善は、ShmIPCを使用した場合ほど大きくありません。
ローカル接続にUNIXドメイン・ソケットを使用するアプリケーションでは、ネットワーク・アドレスとしてttLocalHost
を使用して論理サーバー名(クライアントDSNに対する)を設定する必要があります。詳細は、「UNIXでのクライアントDSNの作成および構成」を参照してください。また、システム・カーネル・パラメータが、必要な接続数を許容するように設定されていることも確認してください。『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のインストールの前提条件に関する説明を参照してください。
クライアント/サーバー・アプリケーションで、シリアライズ可能トランザクションのTT_PREFETCH_CLOSEを有効にします。シリアライズ可能分離モードでは、読取り専用トランザクションを含むすべてのトランザクションが実行時にコミットされる必要があります。TT_PREFETCH_CLOSEが有効になっている場合、サーバーでは、結果セット全体が読取り専用の問合せに対してフェッチされた後でカーソルが閉じられ、トランザクションがコミットされます。クライアントでは、SQLFreeStmt(SQL_CLOSE)およびSQLTransact(SQL_COMMIT)がコールされる必要がありますが、これらのコールは、クライアントで実行されるため、クライアントとサーバー間のネットワーク・ラウンドトリップを必要としません。TT_PREFETCH_CLOSEによって、クライアントとサーバー間のネットワーク通信量が削減され、パフォーマンスが向上します。
TT_PREFETCH_CLOSEが有効になっている場合、複数の文ハンドルは使用しないでください。サーバーでは、クライアントが終了する前に、結果セットのすべてがフェッチされ、トランザクションがコミットされて文ハンドルがクローズされる可能性があります。その結果、すべての文ハンドルがクローズされます。
次の例は、ODBCとJDBCでTT_PREFETCH_CLOSEオプションを使用する方法を示しています。
TT_PREFETCH_CLOSEは、SQLSetConnectOptionまたはSQLSetStmtOption ODBC関数を指定して設定できます。
SQLSetConnectOption (hdbc, TT_PREFETCH_CLOSE, TT_PREFETCH_CLOSE_ON);
SQLExecDirect (hstmt, "SELECT * FROM T", SQL_NTS);
while (SQLFetch (hstmt) != SQL_NO_DATA_FOUND)
{
// do the processing
}
SQLFreeStmt (hstmt, SQL_CLOSE);
この例では、JDBCを使用してTT_PREFETCH_CLOSEオプションを有効にする方法が示されています。
con = DriverManager.getConnection ("jdbc:timesten:client:" + DSN);
stmt = con.createStatement();
import com.timesten.sql
...........
...........
con.setTtPrefetchClose(true);
rs = stmt.executeQuery("select * from t");
while(rs.next())
{
// do the processing
}
import com.timesten.sql
....
try {
((TimesTenConnection)con).setTtPrefetchClose(true);
}
catch (SQLException) {
...
}
rs.close();
con.commit();
アプリケーションは、SQL_NULL_HDBCおよび有効な環境ハンドルを使用してSQLTransactをコールできます。
SQLTransact (ValidHENV, SQL_NULL_HDBC, fType)
または、有効な接続ハンドルを使用してコールすることもできます。
SQLTransact (SQL_NULL_HENV, ValidHDBC, fType).
アプリケーションでは、単一接続でコミット/ロールバックするのみの場合、SQLTransactのコール時に有効な接続ハンドルを使用する必要があります。